package ru.kreda.webapp.client.gin;

import ru.kreda.webapp.client.logic.OrderListActivity.ISettingsFormDisplay;
import ru.kreda.webapp.client.logic.SampleForm1Activity.ISampleForm1Display;
import ru.kreda.webapp.client.mvp.AppActivityMapper;
import ru.kreda.webapp.client.mvp.AsyncPlaceController;
import ru.kreda.webapp.client.view.HeaderView;
import ru.kreda.webapp.client.view.IHeaderDisplay;
import ru.kreda.webapp.client.view.OrderListForm;
import ru.kreda.webapp.client.view.SampleForm1;

import com.google.gwt.activity.shared.ActivityMapper;
import com.google.gwt.event.shared.EventBus;
import com.google.gwt.event.shared.SimpleEventBus;
import com.google.gwt.inject.client.AbstractGinModule;
import com.google.gwt.place.shared.PlaceController;
import com.google.inject.Singleton;

/**
 * GIN модуль для приложения.
 */
public class AppGinModule extends AbstractGinModule {

	@Override
	protected void configure() {
		// привязка шины сообщений
		bind(EventBus.class).to(SimpleEventBus.class).in(Singleton.class);
		// привязка контроллера
		bind(PlaceController.class).to(AsyncPlaceController.class).in(Singleton.class);
		// привязка маппера
		bind(ActivityMapper.class).to(AppActivityMapper.class).in(Singleton.class);
		// привязка UI (view), объявлены как singleton для производительности
		bind(IHeaderDisplay.class).to(HeaderView.class).in(Singleton.class);
		bind(ISampleForm1Display.class).to(SampleForm1.class).in(Singleton.class);
		bind(ISettingsFormDisplay.class).to(OrderListForm.class).in(Singleton.class);
	}

}
